跳到主要内容

JZ49 把字符串转换成整数

https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e

第一次解题:

其实这题挺简单的,不知道为啥属于难题... 就是取出各位数乘十,再加上下一位数就行了

public class Solution {
public int StrToInt(String str) {
if (str == null || str.equals("")) return 0;
char[] nums = str.toCharArray();
int sign = nums[0] == '-' ? -1 : 1;
int i = 0;
int sum = 0;
while (i < nums.length) {
if (nums[i] != '+' && nums[i] != '-') {
if (nums[i] > '9' || nums[i] < '0') return 0;
sum = sum * 10 + (nums[i] - '0'); // 关键
}
i++;
}
return sum * sign;
}
}

第二次解题:

忘记考虑溢出的问题,所以这里应该使用 long 类型来记录值

public class Solution {
public int StrToInt(String str) {
if (str == null || str.equals("")) return 0;
char[] nums = str.toCharArray();
int sign = nums[0] == '-' ? -1 : 1;
int i = 0;
long sum = 0; // 有可能越界
while (i < nums.length) {
if (nums[i] != '+' && nums[i] != '-') {
if (nums[i] > '9' || nums[i] < '0') return 0;
sum = sum * 10 + (nums[i] - '0');
// 注意正数的最大值是 +2147483647 负数的是 -2147483648
if (sign > 0) {
if (sum > Integer.MAX_VALUE) return 0;
} else {
if (sum * -1 < Integer.MIN_VALUE) return 0;
}
}
i++;
}

return (int) sum * sign;
}
}